package com.test.springcloudalibaba;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.stream.annotation.EnableBinding;

/**
 * @Desc 利用中间件特性来便捷地处理该问题的方案：使用RabbitMQ的DLQ队列
 * 先来总结一下在引入了RabbitMQ的DLQ之后，对于消息异常处理更为完整一些的基本思路：
 * <p>
 * 1.瞬时的环境抖动引起的异常，利用重试功能提高处理成功率
 * 2.如果重试依然失败的，日志报错，并进入DLQ队列
 * 3.日志告警通知相关开发人员，分析问题原因
 * 4.解决问题（修复程序Bug、扩容等措施）之后，DLQ队列中的消息移回重新处理
 * 在这样的整体思路中，可能还涉及一些微调，这里举几个常见例子，帮助读者进一步了解一些特殊的场景和配置使用！
 * <p>
 * 如果报错Channel shutdown: channel error; protocol method: #method<channel.close>(rep则清空MQ队列
 * ----------------
 * @CLASS_NAME: DlqApplication
 * ----------------
 * @Author jovi
 * ----------------
 * @Date 2020-04-02 15:16
 */
@EnableBinding(TestTopic.class)
@SpringBootApplication
public class DlqApplication {

    public static void main(String[] args) {
        SpringApplication.run(DlqApplication.class, args);
    }
}
